{#
SPDX-FileCopyrightText: 2022 - 2024 Slavi Pantaleev
SPDX-FileCopyrightText: 2022 Julian-Samuel Gebühr
SPDX-FileCopyrightText: 2022 Stuart Mumford
SPDX-FileCopyrightText: 2025 Suguru Hirahara

SPDX-License-Identifier: AGPL-3.0-or-later
#}

# The full URI to the database. SQLite and Postgres are fully supported.
# Other DBMSes supported by SQLAlchemy may or may not work.
# Format examples:
#   SQLite:   sqlite:///filename.db
#   Postgres: postgresql://username:password@hostname/dbname
database: {{ matrix_bot_maubot_database_uri|to_json }}

# Separate database URL for the crypto database. "default" means use the same database as above.
crypto_database:
  type: default

# Additional arguments for asyncpg.create_pool() or sqlite3.connect()
# https://magicstack.github.io/asyncpg/current/api/index.html#asyncpg.pool.create_pool
# https://docs.python.org/3/library/sqlite3.html#sqlite3.connect
# For sqlite, min_size is used as the connection thread pool size and max_size is ignored.
database_opts:
    min_size: 1
    max_size: 10
plugin_directories:
    # The directory where uploaded new plugins should be stored.
    upload: /data/plugins
    # The directories from which plugins should be loaded.
    # Duplicate plugin IDs will be moved to the trash.
    load:
    - /data/plugins
    trash: /data/trash

# Configuration for storing plugin databases
plugin_databases:
  # Some plugins still require sqlite, so configure a path here.
  # Postgres will be used if supported.
  sqlite: /data/dbs
  postgres: default

server:
    # The IP and port to listen to.
    hostname: 0.0.0.0
    port: {{ matrix_bot_maubot_server_port | to_json }}
    # Public base URL where the server is visible.
    public_url: {{ matrix_bot_maubot_bot_server_public_url | to_json }}
    # The base management API path.
    base_path: {{ matrix_bot_maubot_bot_server_base_path | to_json }}
    # The base path for the UI.
    ui_base_path: {{ matrix_bot_maubot_bot_server_ui_base_path | to_json }}
    # The base path for plugin endpoints. The instance ID will be appended directly.
    plugin_base_path: {{ matrix_bot_maubot_bot_server_plugin_base_path | to_json }}
    # Override path from where to load UI resources.
    # Set to false to using pkg_resources to find the path.
    override_resource_path: /opt/maubot/frontend
    # The base appservice API path. Use / for legacy appservice API and /_matrix/app/v1 for v1.
    appservice_base_path: {{ matrix_bot_maubot_bot_server_appservice_base_path | to_json }}
    # The shared secret to sign API access tokens.
    # Set to "generate" to generate and save a new token at startup.
    unshared_secret: {{ matrix_bot_maubot_unshared_secret | to_json }}

# Known homeservers. This is required for the `mbc auth` command and also allows
# more convenient access from the management UI. This is not required to create
# clients in the management UI, since you can also just type the homeserver URL
# into the box there.
homeservers:
  {{ matrix_bot_maubot_homeserver_name }}:
    # Client-server API URL
        url: {{ matrix_bot_maubot_homeserver_url | to_json }}
    # registration_shared_secret from synapse config
    # You can leave this empty if you don't have access to the homeserver.
    # When this is empty, `mbc auth --register` won't work, but `mbc auth` (login) will.
        secret: {{ matrix_bot_maubot_homeserver_secret | to_json }}

# List of administrator users. Plaintext passwords will be bcrypted on startup. Set empty password
# to prevent normal login. Root is a special user that can't have a password and will always exist.
admins: {{ matrix_bot_maubot_admins | combine( {"root": ""} )|to_json }}

api_features:
    login: true
    plugin: true
    plugin_upload: true
    instance: true
    instance_database: true
    client: true
    client_proxy: true
    client_auth: true
    dev_open: true
    log: true

# Python logging configuration.
#
# See section 16.7.2 of the Python documentation for more info:
# https://docs.python.org/3.6/library/logging.config.html#configuration-dictionary-schema
logging:
    version: 1
    formatters:
        colored:
            (): maubot.lib.color_log.ColorFormatter
            format: '[%(asctime)s] [%(levelname)s@%(name)s] %(message)s'
        normal:
            format: '[%(asctime)s] [%(levelname)s@%(name)s] %(message)s'
    handlers:
        console:
            class: logging.StreamHandler
            formatter: colored
    loggers:
        maubot:
            level: {{ matrix_bot_maubot_logging_level|to_json }}
        mau:
            level: {{ matrix_bot_maubot_logging_level|to_json }}
        aiohttp:
            level: {{ matrix_bot_maubot_logging_level|to_json }}
    root:
        level: {{ matrix_bot_maubot_logging_level|to_json }}
        handlers: [console]
